package com.hope.reflection.question;


import java.lang.reflect.Field;

/**
 * 反射操作属性
 */
public class ReflecAccessProperty {

    public static void main(String[] args) throws Exception {
        //1. 先获取到Student类到Class对象
        Class<?> stuClass = Class.forName("com.hope.reflection.question.Student");
        //2. 创建对象
        Object o = stuClass.getConstructor().newInstance();//o的运行类型Student
        System.out.println(o.getClass());   //Student
        //3. 使用反射得到age 属性对象
        Field age = stuClass.getField("age");
        age.set(o,88);//通过反射来操作属性
        System.out.println(o);
        System.out.println(age.get(o));

        //4. 使用反射操作name 属性
        Field name = stuClass.getDeclaredField("name");
        //   对name 进行爆破，可以操作私有对private属性
        name.setAccessible(true);
        //name.set(o,"蔡江鸿");
        name.set(null,"蔡江鸿-"); // 因为name是static属性，所以这个对象实例o可以写成null
        System.out.println(o);

        System.out.println(name.get(null));//只有静态对时候才可以 写null，因为在类加载对时候，静态属性也加载了

    }
}
class Student{//学生类
    public int age;
    private static String name;


    public Student() { //无参 public
    }

    @Override
    public String toString() {
        return "User[age=" + age + ", name=" + name + "]";
    }
}